Computing and communication networks typically include network devices, such as routers, firewalls, switches or gateways, which transfer or switch data, such as packets, from one or more sources to one or more destinations. Network devices may operate on the packets as the packets traverse the network, such as by forwarding or filtering the packet-based network traffic. Packets may be temporarily stored in queues as packets are moved through the network devices.
Processing modules within a network device may process packets based on sets of instructions. The instructions for each packet may be executed by one of multiple resources, such as processes or execution threads. In systems with fungible resources, efficiently pairing work items (e.g., packets, notifications, packet pointers, etc. from queues) with available resources (e.g., threads or other processing components) can present a challenge.
When multiple requestors desire the same resource, an arbitration circuit is required. When there are multiple resources available, it is necessary to perform multiple arbitrations. Performing multiple arbitrations typically involves a sequential, iterative solution, in which, for each iteration, the winning requestor/resource pair is removed, and a follow-on arbitration is performed to select the next requestor/resource pair. This sequence is repeated N times (where N is the number of resources available), until all available resources are paired with a work item.